package cn.iocoder.yudao.module.aiposter.service.poster;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.aiposter.controller.app.poster.vo.req.*;
import cn.iocoder.yudao.module.aiposter.controller.app.poster.vo.resp.ImgRenderResp;
import cn.iocoder.yudao.module.aiposter.controller.app.poster.vo.resp.PosterGenerateRespVO;
import cn.iocoder.yudao.module.aiposter.dal.dataobject.poster.PosterDO;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.Valid;
import java.util.List;

public interface AppPosterService {

    byte[] segmentation(MultipartFile file);

    /**
     * 基于给定参数渲染模版图片
     * 优先使用base64，没有base64使用图片，没有图片则用默认数据
     * @return
     */
    String renderImg(AppPosterRenderReqVO reqVO);

    /**
     * 基于给定参数渲染模版图片
     * 优先使用base64，没有base64使用图片，没有图片则用默认数据
     *
     * @param renderReqVOS 待渲染列表
     * @return
     */
    List<ImgRenderResp> renderImagesAsync(List<AppPosterRenderReqVO> renderReqVOS);

    /**
     * 基于给定参数渲染模版图片
     * 优先使用base64，没有base64使用图片，没有图片则用默认数据
     *
     * @param renderReqVOS 待渲染列表
     * @return
     */
    List<ImgRenderResp> renderImagesSync(List<AppPosterRenderReqVO> renderReqVOS);

    /**
     * 获取推荐海报模版信息列表
     *
     * @param generateReqVO 生成海报的关键信息输入
     * @return 动态生成的N个候选海报
     */
    List<PosterGenerateRespVO> generatePoster(PosterGenerateReqVO generateReqVO);

    /**
     * 获取推荐海报模版信息列表
     *
     * @param generateReqVO 生成海报的关键信息输入
     * @return 动态生成的N个候选海报
     */
    List<PosterGenerateRespVO> generatePosterPlus(PosterGeneratePlusReqVO generateReqVO);

    /**
     * 创建海报信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long create(@Valid AppPosterSaveReqVO createReqVO);

    /**
     * 更新海报信息
     *
     * @param updateReqVO 更新信息
     */
    void update(@Valid AppPosterSaveReqVO updateReqVO);

    /**
     * 删除海报信息
     *
     * @param id 编号
     */
    void delete(Long id);

    /**
     * 获得海报信息
     *
     * @param id 编号
     * @return 海报信息
     */
    PosterDO get(Long id);

    /**
     * 获得海报信息分页
     *
     * @param pageReqVO 分页查询
     * @return 海报信息分页
     */
    PageResult<PosterDO> getPage(AppPosterPageReqVO pageReqVO);

}
